package com.elitel.frame.base.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
//import com.elitel.common.redis.RedisDbIndex;
//import com.elitel.common.redis.service.RedisCacheService;
import com.elitel.frame.base.component.RedisCacheComponent;
import com.elitel.frame.base.service.BaseRepaddonsService;
import com.elitel.frame.base.service.BaseRepconfigService;
import com.elitel.frame.base.service.CfgDbService;
import com.elitel.frame.base.service.CfgExtrepService;
import com.elitel.frame.base.service.CfgFieldService;
import com.elitel.frame.base.service.CfgTableService;
import com.elitel.frame.main.entity.BaseRepaddons;
import com.elitel.frame.main.entity.BaseRepconfig;
import com.elitel.frame.main.entity.CfgDb;
import com.elitel.frame.main.entity.CfgExtrep;
import com.elitel.frame.main.entity.CfgField;
import com.elitel.frame.main.entity.CfgTable;
import com.elitel.frame.main.entity.ext.ReportRepconfigExt;
import com.elitel.frame.main.entity.vo.ZTreeDataModelVo;

/**
 * 
 * <pre>@ProjectName：frame-base-web    
 * @ClassName：SingleReportController    
 * @Description: TODO(报表单表配置服务)    
 * @author：FanWenquan  
 * @date：2017年8月21日 下午4:13:22       
 * @version </pre>
 */
@Controller
@RequestMapping("/system/singleReport")
public class SingleReportController {
	@Autowired
	private CfgExtrepService cfgExtrepService;
	@Autowired
	private CfgDbService cfgDbService;
	@Autowired
	private CfgTableService cfgTableService;
	@Autowired
	private CfgFieldService cfgFieldService;
	@Autowired
	private BaseRepconfigService baseRepconfigService;
	@Autowired
	private BaseRepaddonsService baseRepaddonsService;
//	@Autowired
//	private RedisCacheService redisCacheService;
	@Autowired RedisCacheComponent redisCacheComponent;
	
	/**
	 * <pre>getTreeList(这里用一句话描述这个方法的作用)   
	 * @author：FanWenquan    
	 * @date：2017年8月21日 下午4:13:08   
	 * @return</pre>
	 */
	@RequestMapping("/treeList")
	@ResponseBody
	public List<ZTreeDataModelVo> getTreeList() {
//		int xx = RedisDbIndex.value;
//		List<ZTreeDataModelVo> list = new ArrayList<ZTreeDataModelVo>();
//		String key = "TREE_repotData";
//
//		if(redisCacheService.stringExists(key, xx)){
//			String treeStr = redisCacheService.getObject(key, xx);
//			list = (List<ZTreeDataModelVo>)JSON.parseArray(treeStr,ZTreeDataModelVo.class);
//		}else{
//			list =cfgExtrepService.getAllTreeList();
//			String trStr = JSON.toJSONString(list);
//			redisCacheService.saveObject(key, trStr, xx);
//		}

		List<ZTreeDataModelVo> list =cfgExtrepService.getAllTreeList();
		return list;
	}
	
	/**
	 * <pre>getCfgDBList(返回所有数据源)   
	 * @author：FanWenquan    
	 * @date：2017年8月22日 下午6:01:45   
	 * @return</pre>
	 */
	@RequestMapping("/getCfgDBList")
	@ResponseBody
	public List<CfgDb> getCfgDBList() {
		List<CfgDb> list = cfgDbService.getCfgDBList();
		return list;
	}
	
	/**
	 * <pre>getCfgTableListByDb(根据数据库库查找数据库表)   
	 * @author：FanWenquan    
	 * @date：2017年8月23日 上午9:21:41   
	 * @return</pre>
	 */
	@RequestMapping("/getCfgTableListByDb")
	@ResponseBody
	public List<CfgTable> getCfgTableListByDb(String dtconn) {
		List<CfgTable> list = cfgTableService.getListbyConn(dtconn);
		return list;
	}
	
	/**
	 * <pre>getcfgExtrepByGuid(根据主键查询报表服务信息)   
	 * @author：FanWenquan    
	 * @date：2017年8月23日 下午2:48:09   
	 * @param guid
	 * @return</pre>
	 */
	@RequestMapping("/getcfgExtrepByGuid")
	@ResponseBody
	public Object getcfgExtrepByGuid(String guid) {
		CfgExtrep extrep = cfgExtrepService.selectCfgExtrepByPrimary(guid);
		return extrep;
	}
	
	/**
	 * <pre>delExtrepByGuid(根据主键删除报表服务信息及其附属信息)   
	 * @author：FanWenquan    
	 * @date：2017年8月23日 下午2:49:49   
	 * @param guid
	 * @return</pre>
	 */
	@RequestMapping("/delExtrepByGuid")
	@ResponseBody
	public Object delExtrepByGuid(String guid) {
		Boolean extrep = false;
		try {
			cfgExtrepService.deleteExtrepByGuid(guid);
		    extrep = true;
		} catch (Exception e) {
			extrep = false;
		}
		
		return extrep;
	}
	
	/**
	 * <pre>insertExtrep(添加报表服务)   
	 * @author：FanWenquan    
	 * @date：2017年8月23日 下午3:34:41
	 * @return</pre>
	 */
	@RequestMapping("/insertExtrep")
	@ResponseBody
	public Object insertExtrep(@RequestBody CfgExtrep cfgExtrep) {
		Integer res = cfgExtrepService.insertExtrep(cfgExtrep);
		return res;
	}
	
	/**
	 * <pre>updateExtrepByGuid(修改报表服务)   
	 * @author：FanWenquan    
	 * @date：2017年8月23日 下午3:35:29
	 * @return</pre>
	 */
	@RequestMapping("/updateExtrepByGuid")
	@ResponseBody
	public Object updateExtrepByGuid(@RequestBody CfgExtrep cfgExtrep) {
		Integer res = cfgExtrepService.updateExtrepByGuid(cfgExtrep);
		return res;
	}
	
	/**
	 * <pre>getExtrepGuid(校验主键是否已存在)   
	 * @author：FanWenquan    
	 * @date：2017年8月24日 上午10:24:55   
	 * @param guid
	 * @return</pre>
	 */
	@RequestMapping("/getExtrepGuid")
	@ResponseBody
	public Object getExtrepGuid(String guid) {
		Boolean res = true;
		CfgExtrep extrep = cfgExtrepService.selectCfgExtrepByPrimary(guid);
		if(extrep != null) {
			res = false;
		}
		return res;
	}
	
	/**
	 * <pre>getCfgFieldListBytable(获取该报表服务的表字段信息)   
	 * @author：FanWenquan    
	 * @date：2017年8月24日 下午5:14:58   
	 * @param dtConfigId
	 * @return</pre>
	 */
	@RequestMapping("/getCfgFieldListBytable")
	@ResponseBody
	public Object getCfgFieldListBytable(String dtConfigId) {
		List<CfgField> list = cfgFieldService.selectFieldByConfig(dtConfigId);
		return list;
	}
	
	/**
	 * <pre>getAllRepconfig(获取该报表服务的所有属性及属性值信息)   
	 * @author：FanWenquan    
	 * @date：2017年8月25日 上午10:38:46   
	 * @param rguid
	 * @return</pre>
	 */
	@RequestMapping("/getAllRepconfig")
	@ResponseBody
	public Object getAllRepconfig(String rguid) {
		List<ReportRepconfigExt> list = baseRepconfigService.getAllRepconfig(rguid);
		return list;
	}
	
	/**
	 * <pre>getRepaddonsCheck(查询报表未添加的属性信息)   
	 * @author：FanWenquan    
	 * @date：2017年8月25日 上午10:43:27   
	 * @param rguid
	 * @return</pre>
	 */
	@RequestMapping("/getRepaddonsCheck")
	@ResponseBody
	public Object getRepaddonsCheck(String rguid,String tempId) {
		List<BaseRepaddons> list = baseRepaddonsService.getRepaddonsCheck(rguid,tempId);
		return list;
	}
	
	/**
	 * <pre>insertRepcofig(添加报表属性信息)   
	 * @author：FanWenquan    
	 * @date：2017年8月25日 下午3:04:25   
	 * @param strFields
	 * @param rguid
	 * @return</pre>
	 */
	@RequestMapping("/insertRepcofig")
	@ResponseBody
	public Object insertRepcofig(String strFields,String rguid) {
		Boolean res= false;
		try {
			baseRepconfigService.insertRepconfig(strFields, rguid);
			res= true;
		} catch (Exception e) {
			res= false;
		}
		return res;
	}
	
	/**
	 * <pre>deleteRepconfigProp(删除报表服务的属性信息)   
	 * @author：FanWenquan    
	 * @date：2017年8月25日 下午3:40:30   
	 * @param guids
	 * @return</pre>
	 */
	@RequestMapping("/deleteRepconfigProp")
	@ResponseBody
	public Object deleteRepconfigProp(String guids) {
		Boolean res= false;
		try {
			baseRepconfigService.deleteRepconfigProp(guids);
			res= true;
		} catch (Exception e) {
			res= false;
		}
		return res;
	}
	
	@RequestMapping("/updateRepconfigProp")
	@ResponseBody
	public Object updateRepconfigProp(@RequestBody BaseRepconfig baseRepconfig) {
		Boolean res= false;
		try {
			baseRepconfigService.updateRepconfigProp(baseRepconfig);
			res= true;
		} catch (Exception e) {
			res= false;
		}
		return res;
	}
}
